Next: Edebug Execution Modes, Previous: Using Edebug, Up: Edebug [Contents][Index]
In order to use Edebug to debug Lisp code, you must first instrument the code. Instrumenting code inserts additional code into it, to invoke Edebug at the proper places.
When you invoke command C-M-x
(eval-defun) with a prefix argument on a function
definition, it instruments the definition before evaluating it.
(This does not modify the source code itself.) If the variable
edebug-all-defs is non-nil, that
inverts the meaning of the prefix argument: in this case,
C-M-x instruments the definition unless it
has a prefix argument. The default value of
edebug-all-defs is nil. The command
M-x edebug-all-defs toggles the value of the variable
edebug-all-defs.
If edebug-all-defs is non-nil, then
the commands eval-region,
eval-current-buffer, and eval-buffer
also instrument any definitions they evaluate. Similarly,
edebug-all-forms controls whether
eval-region should instrument any form,
even non-defining forms. This doesn’t apply to loading or
evaluations in the minibuffer. The command M-x
edebug-all-forms toggles this option.
Another command, M-x edebug-eval-top-level-form, is
available to instrument any top-level form regardless of the
values of edebug-all-defs and
edebug-all-forms. edebug-defun is an
alias for edebug-eval-top-level-form.
While Edebug is active, the command I
(edebug-instrument-callee) instruments the
definition of the function or macro called by the list form after
point, if it is not already instrumented. This is possible only
if Edebug knows where to find the source for that function; for
this reason, after loading Edebug, eval-region
records the position of every definition it evaluates, even if
not instrumenting it. See also the i command (see
Jumping), which steps into the
call after instrumenting the function.
Edebug knows how to instrument all the standard special forms,
interactive forms with an expression argument,
anonymous lambda expressions, and other defining forms. However,
Edebug cannot determine on its own what a user-defined macro will
do with the arguments of a macro call, so you must provide that
information using Edebug specifications; for details, see
Edebug and
Macros.
When Edebug is about to instrument code for the first time in
a session, it runs the hook edebug-setup-hook, then
sets it to nil. You can use this to load Edebug
specifications associated with a package you are using, but only
when you use Edebug.
To remove instrumentation from a definition, simply
re-evaluate its definition in a way that does not instrument.
There are two ways of evaluating forms that never instrument
them: from a file with load, and from the minibuffer
with eval-expression (M-:).
If Edebug detects a syntax error while instrumenting, it
leaves point at the erroneous code and signals an
invalid-read-syntax error.
See Edebug Eval, for other evaluation functions available inside of Edebug.
Next: Edebug Execution Modes, Previous: Using Edebug, Up: Edebug [Contents][Index]